Numerical Analysis
Created | |
---|---|
Last Edited Time | |
By | Sagor <ASH2101008M> |
//e^(-3x/2)
#include<stdio.h>
#include<math.h>
int main(){
double ans=0;
for(double i=0.1; i<=2; i+=0.1){
ans += exp((-1)*i*i*i/2);
}
printf("%lf", ans);
}
//5x^3 + e^(-2x)
#include<stdio.h>
#include<math.h>
int main(){
double ans=0;
for(double i=0.1; i<=2; i+=0.1){
ans += 5*i*i*i + exp((-1)*2*i);
}
printf("%lf", ans);
}

//e^x
#include<stdio.h>
#include<math.h>
int main(){
double ans=1;
double x;
scanf("%lf", &x);
double factorial=1;
for(double i=2; i<=6; i++){
ans += pow(x, i-1)/factorial;
factorial*=i;
}
printf("%lf", ans);
}
//ln(1+x)
#include<stdio.h>
#include<math.h>
int main(){
double ans=0;
double x;
scanf("%lf", &x);
double factorial=1;
for(int i=1; i<=6; i++){
if(i%2==0)
ans -= pow(x, i)/factorial;
else
ans += pow(x, i)/factorial;
factorial*=i;
}
printf("%lf", ans);
}
// ln (1-x)
#include<stdio.h>
#include<math.h>
int main(){
double ans=0;
double x;
scanf("%lf", &x);
double factorial=1;
for(int i=1; i<=6; i++){
ans += pow(x, i)/factorial;
factorial*=i;
}
ans *= (-1);
printf("%lf", ans);
}

//Bisection Method
#include<stdio.h>
#include<math.h>
#define f(x) (exp(x)-3*x)
int main(){
double a,b;
scanf("%lf", &a);
scanf("%lf", &b);
while(true){
double c = (a+b)/2;
if(f(a)*f(c) < 0) b=c;
else a=c;
if(fabs((a)-(b)) <= 0.0001) break;
}
printf("%lf", a);
}
#include<stdio.h>
#include<math.h>
#define f(x) (x*log10(x)-1.2)
int main(){
double a,b;
scanf("%lf", &a);
scanf("%lf", &b);
while(true){
double c = (a+b)/2;
if(f(a)*f(c) < 0) b=c;
else a=c;
if(fabs((a)-(b)) <= 0.0001) break;
}
printf("%lf", a);
}
#include<stdio.h>
#include<math.h>
#define f(x) (x*x*x-6*x+4)
int main(){
double a,b;
scanf("%lf", &a);
scanf("%lf", &b);
while(true){
double c = (a+b)/2;
if(f(a)*f(c) < 0) b=c;
else a=c;
if(fabs((a)-(b)) <= 0.0001) break;
}
printf("%lf", a);
}

// False Position
#include<stdio.h>
#include<math.h>
#define f(x) (x*x*x-6*x+4)
int main(){
double a,b;
scanf("%lf", &a);
scanf("%lf", &b);
double ans=a;
while(true){
double c = ((a*f(b) - b*f(a))/(f(b)-f(a)));
if(f(a)*f(c) < 0) b=c;
else a=c;
ans=c;
if(fabs(f(a)-f(b)) <= 0.0001) break;
}
printf("%lf", ans);
}

// Newton Raphson
#include<stdio.h>
#include<math.h>
#define f(x) (x*x*x-6*x+4)
#define diff(x) (3*x*x - 6)
int main(){
double x0;
scanf("%lf", &x0);
double x=x0;
while(true){
x = x0 - (f(x)/diff(x));
if(fabs(f(x)-f(x0)) <= 0.0001) break;
x0=x;
}
printf("%lf", x);
}

// Upper-triangular method
#include<stdio.h>
#include<math.h>
#define ll int
int main(){
int n,m;
scanf("%d %d", &n, &m);
int a[n][m];
for(ll i=0; i<n; i++)
for(ll j=0; j<m; j++)
scanf("%d", &a[i][j]);
for(ll i=0; i<n; i++){
for(ll j=0; j<i; j++) printf("0 ");
for(ll j=i; j<m; j++){
printf("%d ", a[i][j]);
}
printf("\n");
}
}

// lower triangular
#include<stdio.h>
#include<math.h>
#define ll int
int main(){
int n,m;
scanf("%d %d", &n, &m);
int a[n][m];
for(ll i=0; i<n; i++)
for(ll j=0; j<m; j++)
scanf("%d", &a[i][j]);
for(ll i=0; i<n; i++){
for(ll j=0; j<=i; j++){
printf("%d ", a[i][j]);
}
for(ll j=i+1; j<m; j++) printf("0 ");
printf("\n");
}
}

//Diagonal Matrix
#include<stdio.h>
#include<math.h>
#define ll int
int main(){
int n,m;
scanf("%d %d", &n, &m);
int a[n][m];
for(ll i=0; i<n; i++)
for(ll j=0; j<m; j++)
scanf("%d", &a[i][j]);
for(ll i=0; i<n; i++){
for(ll j=0; j<m; j++){
if(i==j) printf("%d ", a[i][j]);
else printf("0 ");
}
printf("\n");
}
}

// Deteminant
#include<stdio.h>
#include<math.h>
#define ll int
int main(){
int n,m;
scanf("%d %d", &n, &m);
int a[n][m];
for(ll i=0; i<n; i++)
for(ll j=0; j<m; j++)
scanf("%d", &a[i][j]);
double determinant=0;
for(ll i=0; i<n; i++)
determinant += a[0][i]*(a[1][(i+1)%n]*a[2][(i+2)%n] - a[1][(i+2)%n]*a[2][(i+1)%n]);
printf("%lf\n", determinant);
}

//Transpose Matrix
#include<stdio.h>
#include<math.h>
#define ll int
int main(){
int n,m;
scanf("%d %d", &n, &m);
int a[n][m];
for(ll i=0; i<n; i++)
for(ll j=0; j<m; j++)
scanf("%d", &a[i][j]);
for(ll i=0; i<n; i++){
for(ll j=0; j<n; j++){
printf("%d ", a[j][i]);
}
printf("\n");
}
}

//Adjoint Matrix
#include<stdio.h>
#include<math.h>
#define ll int
int main(){
int n,m;
scanf("%d %d", &n, &m);
int a[n][m];
for(ll i=0; i<n; i++)
for(ll j=0; j<m; j++)
scanf("%d", &a[i][j]);
int adj[n][m];
for(ll i=0; i<n; i++){
for(ll j=0; j<n; j++){
adj[i][j] = a[(i+1)%n][(j+1)%n]*a[(i+2)%n][(j+2)%n]
- a[(i+1)%n][(j+2)%n]*a[(i+2)%n][(j+1)%n];
}
}
for(ll i=0; i<n; i++)
{
for(ll j=0; j<m; j++){
printf("%d ", adj[j][i]);
}
printf("\n");
}
}

//Inverse Matrix
#include<stdio.h>
#include<math.h>
#define ll int
int main(){
int n,m;
scanf("%d %d", &n, &m);
int a[n][m];
for(ll i=0; i<n; i++)
for(ll j=0; j<m; j++)
scanf("%d", &a[i][j]);
double determinant = 0;
for(ll i=0; i<n; i++)
determinant += a[0][i]*(a[1][(i+1)%n]*a[2][(i+2)%n]- a[1][(i+2)%n]*a[2][(i+1)%n]);
double adj[n][m];
for(ll i=0; i<n; i++)
for(ll j=0; j<m; j++)
adj[i][j] = a[(i+1)%n][(j+1)%n]*a[(i+2)%n][(j+2)%n]
- a[(i+1)%n][(j+2)%n]*a[(i+2)%n][(j+1)%n];
for(ll i=0; i<n; i++){
for(ll j=0; j<m; j++){
printf("%0.4lf ", adj[j][i]/determinant);
}
printf("\n");
}
}
// Gauss Elimination
#include<stdio.h>
#include<math.h>
#define ll int
int main(){
int n;
scanf("%d", &n);
double a[n+1][n+2];
for(ll i=1; i<=n; i++){
for(ll j=1; j<=n; j++){
scanf("%lf", &a[i][j]);
}
}
for(ll i=1; i<=n; i++)
scanf("%lf", &a[i][n+1]);
double c;
for(ll j=1; j<=n; j++){
for(ll i=1; i<=n; i++){
if(i > j){
c=a[i][j]/a[j][j];
for(ll k=1; k<=n+1; k++){
a[i][k]=a[i][k]-c*a[j][k];
}
}
}
}
double x[n+1];
x[n]=a[n][n+1]/a[n][n];
for(ll i=n-1; i>=1; i--){
double sum=0;
for(ll j=i+1; j<=n; j++){
sum += a[i][j]*x[j];
}
x[i]=(a[i][n+1]-sum)/a[i][i];
}
for(ll i=1; i<=n; i++) printf("%lf\n", x[i]);
}
// Matrix Inversion Method
#include<stdio.h>
#include<math.h>
#define ll int
int main(){
int n;
scanf("%d", &n);
double a[n][n], b[n];
for(ll i=0; i<n; i++){
for(ll j=0; j<n; j++){
scanf("%lf", &a[i][j]);
}
}
for(ll i=0; i<n; i++)
scanf("%lf", &b[i]);
double determinant=0;
for(ll i=0; i<n; i++)
determinant += a[0][i]*(a[1][(i+1)%n]*a[2][(i+2)%n]
- a[1][(i+2)%n]*a[2][(i+1)%n]);
double adj[n][n];
for(ll i=0; i<n; i++)
for(ll j=0; j<n; j++)
adj[i][j] = a[(i+1)%n][(j+1)%n]*a[(i+2)%n][(j+2)%n]
- a[(i+1)%n][(j+2)%n]*a[(i+2)%n][(j+1)%n];
double adjoint[n][n];
for(ll i=0; i<n; i++)
for(ll j=0; j<n; j++)
adjoint[j][i]=(adj[i][j]);
for(ll i=0; i<n; i++){
double sum=0;
for(ll j=0; j<n; j++){
sum += b[j]*adjoint[i][j];
}
printf("%0.4lf\n", (sum/determinant));
}
}

// Trapezoidal Rule from X and Y Values
#include<stdio.h>
#include<math.h>
#define ll int
int main(){
ll n; scanf("%d", &n);
double a[n], b[n];
for(ll i=0; i<n; i++)
scanf("%lf %lf", &a[i], &b[i]);
double xi, xf, h;
scanf("%lf %lf %lf", &xi, &xf, &h);
double ans=(b[0]+b[n-1])/2;
for(ll i=1; i<n-1; i++) ans += b[i];
ans *= h;
printf("%lf", ans);
}
// Trapezoidal Rule from f(x), limit, and h
#include<stdio.h>
#include<math.h>
#include<stdllib.h>
#define f(x) (1/ (1+pow(x, 2)))
int main(){
float lb, ub, h;
scanf("%f %f %f", &lb, &ub, &h );
int n = (ub-lb)/h + 1;
float y[n];
int j=0;
for(int i=0; i<=ub; i+=h){
y[j] = f(i);
j++;
}
float ans = y[0]+y[n-1];
for(int i=1; i<n-1; i++) ans += 2*y[i];
ans *= (h/2);
printf("%f", ans);
}

// Simpson one-third rule
#include<stdio.h>
#include<math.h>
#define ll int
int main(){
ll n; scanf("%d", &n);
double a[n], b[n];
for(ll i=0; i<n; i++)
scanf("%lf %lf", &a[i], &b[i]);
double xi, xf, h;
scanf("%lf %lf %lf", &xi, &xf, &h);
double ans=(b[0]+b[n-1]);
for(ll i=1; i<n-1; i+=2) ans += 4*b[i];
for(ll i=2; i<n-1; i+=2) ans += 2*b[i];
ans *= (h/3);
printf("%lf", ans);
}
//Newton Forward Interpolation
#include <stdio.h>
#include <math.h>
int main()
{
int n;
printf("The number of x and f(x)");
scanf("%d", &n);
double x[n], y[n], xi;
printf("Write the number of x:");
for (int i = 0; i < n; i++)
{
scanf("%lf", &x[i]);
}
printf("Write the number of f(x):");
for (int i = 0; i < n; i++)
{
scanf("%lf", &y[i]);
}
printf("X = ");
scanf("%lf", &xi);
double da[n][n];
for (int j = 0; j < n; j++)
{
da[j][0] = y[j];
}
for (int i = 1; i < n; i++)
{
for (int j = 0; j < n - i; j++)
{
da[j][i] = (da[j + 1][i - 1] - da[j][i - 1]);
}
}
double p = (xi - x[0]) / (x[1] - x[0]);
double ans = y[0];
double fact=1;
for (int i = 1; i < n; i++)
{
double localP = p * 1.00;
fact *= 1.00;
for (int j = 1; j < i; j++)
{
localP *= (p - j);
}
ans += (localP / fact) * da[0][i];
}
printf(" %lf ", ans);
return 0;
}
//Newton Backward
#include <stdio.h>
#include <math.h>
int main()
{
int n;
printf("The number of x and f(x)");
scanf("%d", &n);
double x[n], y[n], xi;
printf("Write the number of x:");
for (int i = 0; i < n; i++)
{
scanf("%lf", &x[i]);
}
printf("Write the number of f(x):");
for (int i = 0; i < n; i++)
{
scanf("%lf", &y[i]);
}
printf("X = ");
scanf("%lf", &xi);
double da[n][n];
for (int j = 0; j < n; j++)
{
da[j][0] = y[j];
}
for (int i = 1; i < n; i++)
{
for (int j = 0; j < n - i; j++)
{
// printf(" %lf %lf ", da[j + 1][i - 1], da[j][i - 1]);
da[j][i] = (da[j + 1][i - 1] - da[j][i - 1]);
// printf(" %lf \n ", da[j][i]);
}
}
double p = (xi - x[n - 1]) / (x[1] - x[0]);
double ans = y[n - 1];
for (int i = n - 1; i >= 1; i--)
{
double localP = p * 1.00;
double fact = 1.00;
for (int j = 1; j <= n - i - 1; j++)
{
fact = fact * j;
}
for (int j = 1; j < n - i - 1; j++)
{
localP *= (p - j);
}
ans += (localP / fact) * da[n - i - 1][i];
}
printf("%lf ", ans);
return 0;
}
//Newton Devided Difference
#include <stdio.h>
#include<stdlib.h>
#include <math.h>
int main()
{
int n;
//taking the total number of x
printf("Enter number of x and y or f(x)\n");
scanf("%d", &n);
double x[n], y[n], X;
// taking the value of X
printf("jot down the value of x\n");
for (int i = 0; i < n; i++)
scanf("%lf", &x[i]);
// taking the value of y/f(x)
printf("write down the number of y or f(x):\n");
for (int i = 0; i < n; i++)
scanf("%lf", &y[i]);
//taking the value of question
printf("The X you want to get = ");
scanf("%lf", &X);
double table[n][n];
for (int j = 0; j < n; j++)
table[j][0] = y[j];
for (int i = 1; i < n; i++)
for (int k = 0; k < n - i; k++)
table[k][i] = (table[k + 1][i - 1] - table[k][i - 1]) / (x[i + k] - x[k]);
double ans = y[0];
for (int i = 1; i < n-1; i++)
{
double ansa = 1.00;
for (int k = 0; k <= i-1; k++)
ansa *= (X - x[k]);
ans += (ansa)*table[0][i];
}
//printing ans
printf("Ans: %lf ", ans);
return 0;
}
// Version 1: Numerical Differentiation
// Warning : Bhuuul acheee
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int n;
int main()
{
//taking the total number of x
printf("Enter number of x and y or f(x)\n");
scanf("%d", &n);
double x[n], y[n], X;
// taking the value of X
printf("jot down the value of x\n");
for (int i = 0; i < n; i++)
scanf("%lf", &x[i]);
// taking the value of y/f(x)
printf("write down the number of y or f(x):\n");
for (int i = 0; i < n; i++)
scanf("%lf", &y[i]);
//taking the value of question
printf("The X you want to get = ");
scanf("%lf", &X);
int Xindex;
for(int i=0; i<n; i++){
if(X == x[i]) Xindex=i;
}
double table[n][n];
for (int j = 0; j < n; j++)
{
table[j][0] = y[j];
}
for (int i = 1; i < n; i++)
for (int j = 0; j < n - i; j++)
table[j][i] = (table[j + 1][i - 1] - table[j][i - 1]);
double ans = 0.000000;
for (int i = 0; i < n; i++)
{
if(i%2 == 1)
ans-=(1/(i+1))*(table[Xindex-i][i]);
else
ans+=(1/(i+1))*(table[Xindex-i][i]);
}
printf("Ans for the 3rd derivative : %lf ", ans);
return 0;
}
/*
Version 02 : Numerical Differentiation
From : Aminul Imam Robi (MUH2101038M)
*/
#include <stdio.h>
#include <math.h>
int main()
{
int n;
printf("Enter number of data points : ");
scanf("%d", &n);
double x[n], y[n];
printf("Enter values of x : ");
for (int i = 0; i < n; i++)
scanf("%lf", &x[i]);
printf("Enter values of y : ");
for (int i = 0; i < n; i++)
scanf("%lf", &y[i]);
double value;
printf("Enter a value of x : ");
scanf("%lf", &value);
int index;
for (int i = 0; i < n; i++)
{
if (value == x[i])
{
index = i;
break;
}
}
// Making table
double table[n][n];
for (int i = 0; i < n; i++)
table[i][0] = y[i];
for (int i = 1; i < n; i++)
{
for (int j = 0; j < n - i; j++)
{
table[j][i] = table[j + 1][i - 1] - table[j][i - 1];
}
}
// Result calculation
double h = x[1] - x[0];
double p = (value - x[0]) / (x[1] - x[0]);
double a = (2 * p - 1) / 2;
double b = (3 * p * p - 6 * p + 2) / 6;
double answer = 0;
for (int i = 1; i < 4; i++)
{
if (i == 2)
{
answer += (a * table[0][i]);
}
if (i == 3)
{
answer += (b * table[0][i]);
}
else
{
answer += table[0][i];
}
}
answer *= (1 / h);
printf("Answer : %.4lf\n", answer);
}
//Lagrange Interpolation
#include <stdio.h>
#include <math.h>
int main()
{
int n;
printf("The number of x and f(x)");
scanf("%d", &n);
double x[n], y[n], xi;
printf("Write the number of x:");
for (int i = 0; i < n; i++)
{
scanf("%lf", &x[i]);
}
printf("Write the number of f(x):");
for (int i = 0; i < n; i++)
{
scanf("%lf", &y[i]);
}
printf("X = ");
scanf("%lf", &xi);
double da[n][n];
for (int j = 0; j < n; j++)
{
da[j][0] = y[j];
}
double ans = 0;
for (int i = 0; i < n; i++)
{
double localAns = 1;
for (int j = 0; j < n; j++)
{
if (i == j)
continue;
localAns *= (xi - x[j]);
localAns /= (x[i] - x[j]);
}
ans += localAns * y[i];
}
printf(" %lf ", ans);
return 0;
}
//Iterative Method
#include <stdio.h>
#include <math.h>
#define f(x) (x * x * x + x * x - 1)
#define phi(x) 1 / sqrt(1 + x)
#define diffPhi(x) (0.5 / sqrt(1 + x))
int main()
{
double a = 0, b = 0;
double x1 = 0, x2 = 0;
// Step 1 : finding the value of x1 and x2
while (1)
{
/*
ekhane dui bhabe check kortechi,
dhoren,
1) (0 1), (1,2) , ...
2) (0,-1), (-1,-2), ....
ig, yk why.
*/
if (f(a) * f((a - (double)1.0000)) < 0)
{
printf("%lf %lf", f(a), f((a - (double)1.0000)));
x1 = a;
x2 = a - 1;
break;
}
if (f(b) * f((b + (double)1.0000)) < 0)
{
x1 = b;
x2 = b + 1;
break;
}
a--;
b++;
}
// Step 2 & 3 : finding the root
// we'll just jot down the steps which are written on the blog
double ans = 1e9; // Just assume a number which can never be the answer
double x0 = (x1 + x2) / 2;
if (abs(diffPhi(x0)) < 1)
{
while (1)
{
double xn = phi(x0);
if (fabs(xn - x0) <= 0.001)
{
ans = xn;
break;
}
x0 = xn;
}
}
else
{
printf("NOT FOUND");
return 0;
}
// Printing the answer
printf("%lf", ans);
return 0;
}
//Secant Method
#include <stdio.h>
#include <math.h>
#define f(x) (x * x * x - 2 * x - 5)
int main()
{
double a = 0, b = 0;
double x1 = 0, x2 = 0;
// Step 1 : finding the value of x1 and x2
while (1)
{
/*
ekhane dui bhabe check kortechi,
dhoren,
1) (0 1), (1,2) , ...
2) (0,-1), (-1,-2), ....
ig, yk why.
*/
if (f(a) * f((a - (double)1.0000)) < 0)
{
printf("%lf %lf", f(a), f((a - (double)1.0000)));
x1 = a;
x2 = a - 1;
break;
}
if (f(b) * f((b + (double)1.0000)) < 0)
{
x1 = b;
x2 = b + 1;
break;
}
a--;
b++;
}
// Step 2 & 3 : finding the root
// we'll just jot down the steps which are written on the blog
double ans = 1e9; // Just assume a number which can never be the answer
while (1)
{
double prevAns = ans;
double x = ((x1 * f(x2) - x2 * f(x1)) / (f(x2) - f(x1)));
ans = x;
x1 = x2;
x2 = x;
// Calculating the the literation of last two answer
if (fabs((prevAns) - (ans)) <= 0.001)
{
break;
}
}
// Printing the answer
printf("%lf", ans);
return 0;
}
//Seidel
/*
From : Saiful
*/
#include<stdio.h>
#define f1(x,y,z) (95-11*y+4*z)/83
#define f2(x,y,z) (104 - 7*x - 13*z)/52
#define f3(x,y,z) (71-3*x-8*y)/29
int main(){
double x=0, y=0, z=0;
double ex=100, ey=100, ez=100;
double check = 0.00001;
while(fabs(x-ex) > check && fabs(y-ey)> check && fabs(y-ez) > check){
ex=x, ey=y, ez=z;
x=f1(x,y,z);
y=f2(x,y,z);
z=f3(x,y,z);
}
printf("%lf %lf %lf", x,y,z);
return 0;
}
// Euler Method from 15th Batch
#include<stdio.h>
float fun(float x,float y)
{
float f;
f=x+y;
return f;
}
main()
{
float a,b,x,y,h,t,k;
printf("\nEnter x0,y0,h,xn: ");
scanf("%f%f%f%f",&a,&b,&h,&t);
x=a;
y=b;
printf("\n x\t y\n");
while(x<=t)
{
k=h*fun(x,y);
y=y+k;
x=x+h;
printf("%0.3f\t%0.3f\n",x,y);
}
}